package com.test35_代理模式;

/**
 * 静态代理设计模式
 */
public class Demo01_Proxy {

    public static void main(String[] args) {
        ISleep sleep = new SleepProxy(new SleepReal());
        sleep.make();
    }
}

/**
 * 核心业务接口
 */
interface ISleep {
    public void make();
}

/**
 * 真实业务实现类
 */
class SleepReal implements ISleep {
    @Override
    public void make() {
        System.out.println("【真实业务】和我的爱妃一起XXOO后安静的一个人睡觉。");
    }
}

/**
 * 代理业务实现类
 */
class SleepProxy implements ISleep {
    private ISleep sleep;   // 要设置被代理者

    public SleepProxy(ISleep sleep) {
        this.sleep = sleep;
    }

    public void note() {
        System.out.println("【代理业务】向翻牌子的贵妃宣旨。");
    }

    public void give() {
        System.out.println("【代理业务】需要进行提前的香汤沐浴。");
    }

    @Override
    public void make() {
        this.note();
        this.give();
        this.sleep.make();
        this.move();
    }

    public void move() {
        System.out.println("【代理业务】不要让皇上过度放纵，于是赶紧把娘娘送回各自的公府。");
    }
}
